//
//  "$Id: System.h 22026 2011-03-28 08:11:05Z wang_haifeng $"
//
//  Copyright (c)1992-2007, ZheJiang Dahua Technology Stock CO.LTD.
//  All Rights Reserved.
//
//	Description:	
//	Revisions:		Year-Month-Day  SVN-Author  Modification
//

#ifndef __INSTALL_API_H__
#define __INSTALL_API_H__

#include "Types.h"
#include "Defs.h"

#ifdef __cplusplus
extern "C" {
#endif

/// \defgroup InstallAPI API Install
/// 升级脚本解析等API。
///	\n 调用流程图:
/// \code
///    ==========================
///               |
///       createInstallParser
///               |
///            addRef
///               |
///          loadInstallFile
///               |
///         getSupportedDevice
///               |
///           getCommand
///               |         
///            release
///               |
///    ===========================
/// \endcode
/// @{

/// 安装包支持的设备
typedef struct InstallDevice
{
	char type[32];		///< 设备名
	char version[16];	///< 硬件版本号
	char reserved[80];	///< 保留
} InstallDevice;


/// 安装包包含的命令
typedef struct InstallCommand
{
	char cmd[32];	///< 命令
	char src[32];	///< 源数据标志
	char dest[32];	///< 目标数据标志
	char opts[32];	///< 选项
} InstallCommand;


/// 升级文件解析接口
typedef struct InstallParser
{
	/// 底层私有数据
	void *priv;


	/// 增加接口引用
	int (*addRef)(struct InstallParser *thiz);


	/// 释放接口
	int (*release)(struct InstallParser *thiz);

	
	/// 加载安装文件，可能是lua或者json
	/// \param [in]buffer1 安装文件1缓冲，一般是json文件Install，或者LUA文件Install.lua
	/// \param [in]buffer2 安装文件2缓冲，一般是Hardware.lua
	/// \retval 0  成功
	/// \retval <0 失败
	int (*loadInstallFile)(struct InstallParser *thiz, char * buffer1, char * buffer2);
	
	
	/// 获取安装包支持的设备型号信息
	/// \param [in]index  序号，从0开始，超出支持的设备序号则返回失败
	/// \param [out]device 传出的设备信息
	/// \retval 0  成功
	/// \retval <0 失败
	int (*getSupportedDevice)(struct InstallParser *thiz, int index, InstallDevice* device);
	
	
	/// 获取安装包包含的命令
	/// \param [in]index  序号，从0开始，超出包含的命令序号则返回失败
	/// \param [out]device 传出的设备信息
	/// \retval 0  成功
	/// \retval <0 失败
	int (*getCommand)(struct InstallParser *thiz, int index, InstallCommand* command);


	/// 保留
	int reserved[122];
	
}InstallParser;


/// flash接口描述，128字节
typedef struct InstallParserDesc
{
	int reserved[32];			///< 保留
} InstallParserDesc;


/// 创建原始Flash设备接口。
///
/// \param [in] desc  升级文件解析接口描述结构InstallParserDesc指针
/// \param [out] install 升级文件解析接口指针的指针
/// \retval <0 创建失败
/// \retval 0 创建成功
int PAL_API createInstallParser(InstallParserDesc *desc, InstallParser **install);


/// @} end of group

#ifdef __cplusplus
}
#endif

#endif //__INSTALL_API_H__

